﻿
namespace Microsoft.Xna.Framework.Graphics
{
	/// <summary>
	/// Represents an annotation to an EffectParameter.
	/// </summary>
	public sealed class EffectAnnotation
	{
		#region Fields
		private int _columns;
		internal string _name;
		private EffectParameterClass _parameterClass;
		private EffectParameterType _parameterType;
		private int _rows;
		internal string _semantic;
		#endregion

		#region Properties
		/// <summary>
		/// Gets the number of columns in this effect annotation.
		/// </summary>
		public int ColumnCount
		{
			get { return _columns; }
		}

		/// <summary>
		/// Gets the name of the effect annotation.
		/// </summary>
		public string Name
		{
			get { return _name; }
		}

		/// <summary>
		/// Gets the parameter class of this effect annotation.
		/// </summary>
		public EffectParameterClass ParameterClass
		{
			get { return _parameterClass; }
		}

		/// <summary>
		/// Gets the parameter type of this effect annotation.
		/// </summary>
		public EffectParameterType ParameterType
		{
			get { return _parameterType; }
		}

		/// <summary>
		/// Gets the row count of this effect annotation.
		/// </summary>
		public int RowCount
		{
			get { return _rows; }
		}

		/// <summary>
		/// Gets the semantic of this effect annotation.
		/// </summary>
		public string Semantic
		{
			get { return _semantic; }
		}
		#endregion

		#region Constructor
		internal EffectAnnotation()
		{
		}
		#endregion

		#region Public Methods
		/// <summary>
		/// Gets the value of the EffectAnnotation as a Boolean.
		/// </summary>
		public bool GetValueBoolean()
		{
			return new EffectParameter(null, -1).GetValueBoolean();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a Int32.
		/// </summary>
		public int GetValueInt32()
		{
			return new EffectParameter(null, -1).GetValueInt32();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a Matrix.
		/// </summary>
		public Matrix GetValueMatrix()
		{
			return new EffectParameter(null, -1).GetValueMatrix();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a Single.
		/// </summary>
		public float GetValueSingle()
		{
			return new EffectParameter(null, -1).GetValueSingle();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a String.
		/// </summary>
		public string GetValueString()
		{
			return new EffectParameter(null, -1).GetValueString();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a Vector3.
		/// </summary>
		public Vector2 GetValueVector2()
		{
			return new EffectParameter(null, -1).GetValueVector2();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a Vector3.
		/// </summary>
		public Vector3 GetValueVector3()
		{
			return new EffectParameter(null, -1).GetValueVector3();
		}

		/// <summary>
		/// Gets the value of the EffectAnnotation as a Vector4.
		/// </summary>
		public Vector4 GetValueVector4()
		{
			return new EffectParameter(null, -1).GetValueVector4();
		}
		#endregion
	}
}
